package com.google.project.client.Sharing;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.project.client.Service.UsersService;
import com.google.project.client.Service.UsersServiceAsync;
import com.google.project.shared.CryptString;
import com.google.project.shared.UsersDTO;

public class ChangePassword extends DialogBox {

	private static final Binder binder = GWT.create(Binder.class);
	@UiField Button btnAccept;
	@UiField Button btnClose;
	@UiField PasswordTextBox txtPassOld;
	@UiField PasswordTextBox txtPassNew;
	@UiField PasswordTextBox txtPassRetry;

	interface Binder extends UiBinder<Widget, ChangePassword> {
	}
	private final UsersServiceAsync userService = GWT
	.create(UsersService.class);
	
	UsersDTO userDTO=new UsersDTO();
	
	public ChangePassword() {
		setWidget(binder.createAndBindUi(this));
	}
	public ChangePassword(UsersDTO userDTO) {
		
		this.userDTO=userDTO;
		setWidget(binder.createAndBindUi(this));
	}
	@UiHandler("btnAccept")
	void onBtnAcceptClick(ClickEvent event) {
		if(validate()){
			userDTO.setPassword(txtPassNew.getText().trim());
			userService.updateAccount(userDTO, new AsyncCallback<Void>() {
				
				@Override
				public void onSuccess(Void result) {
					Window.alert("Thay đổi mật khẩu thành công!");
					closeDialog();
				}
				
				@Override
				public void onFailure(Throwable caught) {
					Window.alert("Yêu cầu chưa thể thực hiện được!");
				}
			});
		}
	}
	
	boolean validate(){
		boolean check=true;
		CryptString cryptPass=new CryptString();
		String passOld=txtPassOld.getText().trim();
		String passNew=txtPassNew.getText().trim();
		String passTry=txtPassRetry.getText().trim();
		if(passOld==null || passOld.equalsIgnoreCase("")){
			Window.alert("Mật khẩu hiện tại không được để trống!");
			check=false;
			Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand () {
		        public void execute () {
		        	txtPassOld.setFocus(true);
		        }
		    });
		}else{
			if(passOld.length()<6){
				Window.alert("Mật khẩu hiện tại không được nhập dưới 6 kí tự!");
				check=false;
			}else{
				if(!cryptPass.encryptPassword(passOld).equals(userDTO.getPassword())){
					Window.alert("Mật khẩu hiện tại nhập không đúng!");
					check=false;
				}else{
					if(passNew==null || passNew.equalsIgnoreCase("")){
						Window.alert("Mật khẩu mới không được để trống!");
						check=false;
						Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand () {
					        public void execute () {
					        	txtPassNew.setFocus(true);
					        }
					    });
					}else{
						if(passNew.length()<6){
							Window.alert("Mật khẩu mới không được nhập dưới 6 kí tự!");
							check=false;
						}else{
							if(passTry==null || passTry.equalsIgnoreCase("")){
								Window.alert("Chưa nhập mật khẩu xác nhận!");
								check=false;
								Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand () {
							        public void execute () {
							        	txtPassRetry.setFocus(true);
							        }
							    });
							}else{
								if(!passNew.equals(passTry)){
									check=false;
									Window.alert("Xác nhận mật khẩu mới không đúng!");
									
								}
							}
						}
						
					}
				}
			}
			
		}
		
		return check;
	}
	@UiHandler("btnClose")
	void onBtnCloseClick(ClickEvent event) {
		this.hide();
	}
	public void closeDialog(){
		this.hide();
	}
}
